﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CRMBussines
{
    public partial class CrmBussines : IDisposable
    {
        public List<Cliente> ObtenCliente()
        {
            List<Cliente> res = new List<Cliente>();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            var ctes = (from cte in db.Clientes select cte);
            res = ctes.ToList<Cliente>();

            return res;
        }

        public IQueryable<ResultadoClientes> ObtenClientesCompleto(int id)
        {


            db = new CRMModelControladorDataContext(_cadenaConexion);

            IQueryable<ResultadoClientes> res = (from x in db.Clientes
                                                 where x.ProspectosId == id 
                                                 select new ResultadoClientes()                                                 
                                                   {
                                                        ClientesId = x.ClientesId,
                                                        RFC = x.RFC,
                                                        Fecha_Recibo_Factura = x.Fecha_Recibo_Factura,
                                                        Fecha_Pago = x.Fecha_Pago,
                                                        Condiciones_Pago = x.Condiciones_Pago,
                                                        Procedimiento_Pago = x.Procedimiento_Pago,
                                                        Fecha_Alta = x.Fecha_Alta,
                                                        ProspectosId = x.ProspectosId,
                                                        UsuariosId = x.UsuariosId,
                                                        Prospecto = x.Prospecto.Nombre,
                                                        Usuario = x.Usuario.Nombre 

                                                   }
                                            );


            return res;
        }

        public Cliente ObtenCte(int id)
        {
            Cliente de = new Cliente();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            de = db.Clientes.Single(c => c.ClientesId == id);

            return de;
        }

        public void GuardaCliente(Cliente cliente)
        {
            cliente.UsuariosId = _usuarioFirmado.UsuariosId;
            db = new CRMModelControladorDataContext(_cadenaConexion);
            db.Clientes.InsertOnSubmit(cliente);
            db.SubmitChanges();

            db.InsertaClienteReclutamiento(cliente.Prospecto.Nombre_Comercial, cliente.RFC, cliente.Prospecto.SubSectore.Descripcion, 
                cliente.Prospecto.Calle, cliente.Prospecto.Colonia,cliente.Prospecto.MunicipioPai.Nombre,
                cliente.Prospecto.EstadoPai.Nombre,cliente.Prospecto.Conmutador,
                "", "", "", cliente.Prospecto.Email, cliente.ClientesId.ToString(), cliente.Prospecto.Cp);
        }

        public void ActualizaCliente(Cliente cliente)
        {
            Cliente cte = new Cliente();
            db = new CRMModelControladorDataContext(_cadenaConexion);
            cte = db.Clientes.Single(c => c.ClientesId == cliente.ClientesId);
            cte.RFC = cliente.RFC;
            cte.Fecha_Recibo_Factura = cliente.Fecha_Recibo_Factura;
            cte.Fecha_Pago = cliente.Fecha_Pago;
            cte.Condiciones_Pago = cliente.Condiciones_Pago;
            cte.Procedimiento_Pago = cliente.Procedimiento_Pago;
            cte.Fecha_Alta = cliente.Fecha_Alta;
            cte.ProspectosId = cliente.ProspectosId;
            cte.UsuariosId = _usuarioFirmado.UsuariosId;

            db.SubmitChanges();
        }

        public void EliminaCliente(int id)
        {
            Cliente cte = new Cliente();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            cte = db.Clientes.Single(c => c.ClientesId == id);
            db.Clientes.DeleteOnSubmit(cte);
            db.SubmitChanges();
        }

        public IQueryable<ResultadoUbicaciones> ObtenUbicacionesXCte(int id)
        {


            db = new CRMModelControladorDataContext(_cadenaConexion);

            IQueryable<ResultadoUbicaciones> res = (from x in db.Ubicaciones
                                                  where x.ClientesId == id
                                                    select new ResultadoUbicaciones()
                                                  {
                                                        UbicacionesId = x.UbicacionesId,
                                                        Calle = x.Calle,
                                                        Colonia = x.Colonia,
                                                        CP = x.CP,
                                                        ClientesId = x.ClientesId,
                                                        CiudadPaisId = x.CiudadPaisId,
                                                        MunicipioPaisId = x.MunicipioPaisId,
                                                        EstadoPaisId = x.EstadoPaisId,
                                                        UsuariosId = x.UsuariosId,
                                                        Cliente = x.Cliente.RFC,
                                                        Ciudad = x.CiudadPai.Nombre ,
                                                        Municipio = x.MunicipioPai.Nombre ,
                                                        Estado = x.EstadoPai.Nombre
                                                  }
                                            );


            return res;
        }

        public Ubicacione ObtenUbicaciones(int id)
        {
            Ubicacione de = new Ubicacione();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            de = db.Ubicaciones.Single(c => c.UbicacionesId == id);

            return de;
        }

        public void GuardaUbicacion(Ubicacione ubicacion)
        {
            ubicacion.UsuariosId = _usuarioFirmado.UsuariosId;
            db = new CRMModelControladorDataContext(_cadenaConexion);
            db.Ubicaciones.InsertOnSubmit(ubicacion);
            db.SubmitChanges();
        }

        public void ActualizaUbicacion(Ubicacione ubicacion)
        {
            Ubicacione ubi = new Ubicacione();
            db = new CRMModelControladorDataContext(_cadenaConexion);
            ubi = db.Ubicaciones.Single(c => c.UbicacionesId == ubicacion.UbicacionesId);

            ubi.Calle = ubi.Calle;
            ubi.Colonia = ubi.Colonia;
            ubi.CP = ubi.CP;
            ubi.ClientesId = ubi.ClientesId;
            ubi.CiudadPaisId = ubi.CiudadPaisId;
            ubi.MunicipioPaisId = ubi.MunicipioPaisId;
            ubi.EstadoPaisId = ubi.EstadoPaisId;
            ubi.UsuariosId = _usuarioFirmado.UsuariosId;

            db.SubmitChanges();
        }

        public void EliminaUbicacion(int id)
        {
            Ubicacione ubi = new Ubicacione();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            ubi = db.Ubicaciones.Single(c => c.UbicacionesId == id);
            db.Ubicaciones.DeleteOnSubmit(ubi);
            db.SubmitChanges();
        }

        public IQueryable<ResultadoFiscales> ObtenFiscalesXCte(int id)
        {


            db = new CRMModelControladorDataContext(_cadenaConexion);

            IQueryable<ResultadoFiscales> res = (from x in db.Fiscales
                                                    where x.ClientesId == id
                                                 select new ResultadoFiscales()
                                                    {
                                                        FiscalesId = x.FiscalesId,
                                                        RFC = x.RFC,
                                                        Calle = x.Calle,
                                                        Colonia = x.Colonia,
                                                        CP = x.CP,
                                                        ClientesId = x.ClientesId,
                                                        CiudadPaisId = x.CiudadPaisId,
                                                        MunicipioPaisId = x.MunicipioPaisId,
                                                        EstadoPaisId = x.EstadoPaisId,
                                                        UsuariosId = x.UsuariosId,
                                                        Cliente = x.Cliente.RFC,
                                                        Ciudad = x.CiudadPai.Nombre,
                                                        Municipio = x.MunicipioPai.Nombre,
                                                        Estado = x.EstadoPai.Nombre ,
                                                        Usuario = x.Usuario.Nombre 
                                                    }
                                            );


            return res;
        }

        public Fiscale ObtenFiscales(int id)
        {
            Fiscale de = new Fiscale();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            de = db.Fiscales.Single(c => c.FiscalesId == id);

            return de;
        }

        public void GuardaFiscales(Fiscale fiscal)
        {
            fiscal.UsuariosId = _usuarioFirmado.UsuariosId;
            db = new CRMModelControladorDataContext(_cadenaConexion);
            db.Fiscales.InsertOnSubmit(fiscal);
            db.SubmitChanges();
        }

        public void ActualizaFiscales(Fiscale fiscal)
        {
            Fiscale fis = new Fiscale();
            db = new CRMModelControladorDataContext(_cadenaConexion);
            fis = db.Fiscales.Single(c => c.FiscalesId == fiscal.FiscalesId);

            fis.RFC = fiscal.RFC;
            fis.Calle = fiscal.Calle;
            fis.Colonia = fiscal.Colonia;
            fis.CP = fiscal.CP;
            fis.ClientesId = fiscal.ClientesId;
            fis.CiudadPaisId = fiscal.CiudadPaisId;
            fis.MunicipioPaisId = fiscal.MunicipioPaisId;
            fis.EstadoPaisId = fiscal.EstadoPaisId;
            fis.EstadoPaisId = fiscal.EstadoPaisId;
            fis.UsuariosId = _usuarioFirmado.UsuariosId;

            db.SubmitChanges();
        }

        public void EliminaFiscal(int id)
        {
            Fiscale fis = new Fiscale();

            db = new CRMModelControladorDataContext(_cadenaConexion);
            fis = db.Fiscales.Single(c => c.FiscalesId == id);
            db.Fiscales.DeleteOnSubmit(fis);
            db.SubmitChanges();
        }

    }

    public class ResultadoClientes
    {
        public int ClientesId { get; set; }
        public string RFC { get; set; }
        public string Fecha_Recibo_Factura { get; set; }
        public string Fecha_Pago { get; set; }
        public string Condiciones_Pago { get; set; }
        public string Procedimiento_Pago { get; set; }
        public DateTime? Fecha_Alta { get; set; }
        public int ProspectosId { get; set; }
        public int UsuariosId { get; set; }
        public string Prospecto { get; set; }
        public string Usuario { get; set; }
    }

    public class ResultadoUbicaciones
    {
        public int UbicacionesId { get; set; }
        public string Calle { get; set; }
        public string Colonia { get; set; }
        public string CP { get; set; }
        public int ClientesId { get; set; }
        public int CiudadPaisId { get; set; }
        public int MunicipioPaisId { get; set; }
        public int EstadoPaisId { get; set; }
        public int UsuariosId { get; set; }
        public string Cliente { get; set; }
        public string Ciudad { get; set; }
        public string Municipio { get; set; }
        public string Estado { get; set; }
        public string Usuario { get; set; }
    }

    public class ResultadoFiscales
    {
        public int FiscalesId { get; set; }
        public string RFC { get; set; }
        public string Calle { get; set; }
        public string Colonia { get; set; }
        public string CP { get; set; }
        public int ClientesId { get; set; }
        public int CiudadPaisId { get; set; }
        public int MunicipioPaisId { get; set; }
        public int EstadoPaisId { get; set; }
        public int UsuariosId { get; set; }
        public string Cliente { get; set; }
        public string Ciudad { get; set; }
        public string Municipio { get; set; }
        public string Estado { get; set; }
        public string Usuario { get; set; }
    }
}
